home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 23 / CU Amiga - Super CD-ROM 23 (June 1998).iso / CreatingGames / Utilities / Basic / BlitzPlay / bin / QuadraComposer.s < prev    next >
Encoding:
Text File  |  1992-09-02  |  29.0 KB  |  1,703 lines

  1.  
  2. BRA InitPlay  ;requires memadr in a0 and size in d0
  3. BRA InitSnd
  4. BRA Interrupt
  5. BRA EndSnd
  6. BRA EndPlay
  7. BRA SetVol    ;requires leftvol in d0, rightvol in d1 and vol in d2
  8.  
  9. ;For the jumptable I compiled this source, and hexedited the exe
  10. ;header to jump to the above entries.  Makes things easier.
  11.  
  12. ;*-----------------------------------------------------------------------*
  13. ;
  14. ; Interrupt f|r Replay
  15.  
  16. .Interrupt:
  17.   MOVEM.l d2-d7/a2-a6,-(a7)
  18.   BSR QC_music  ;DudelDiDum
  19.   MOVEM.l (a7)+,d2-d7/a2-a6
  20.   RTS
  21.  
  22. ;*-----------------------------------------------------------------------*
  23. ;
  24. ; Init Player
  25.  
  26. .InitPlay:
  27.   BSR QC_reloc  ;relocate Module
  28.   TST.l d0
  29.   BNE EndPlay   ;error !
  30.   RTS
  31.  
  32. ;*-----------------------------------------------------------------------*
  33. ;
  34. ; End Player
  35.  
  36. .EndPlay:
  37.   MOVEQ #-1,d0
  38.   RTS
  39.  
  40. ;*-----------------------------------------------------------------------*
  41. ;
  42. ; Init Module
  43.  
  44. .InitSnd:
  45.   BSR QC_init
  46.   RTS
  47.  
  48. ;*-----------------------------------------------------------------------*
  49. ;
  50. ; Clean up Module
  51.  
  52. .EndSnd:
  53.   BSR QC_end
  54.   RTS
  55.  
  56. ;*-----------------------------------------------------------------------*
  57. ;
  58. ; Copy Volume and Balance Data to internal Buffer
  59.  
  60. .SetVol:
  61.   MULU d2,d0
  62.   LSR.w #6,d0
  63.   LEA QC_chan1(pc),a0
  64.   LEA $dff0a0,a1
  65.   MOVEM.l d1-d2,-(a7)
  66.   MOVEQ #2-1,d1
  67.  
  68. .SetVolL:
  69.   MOVE.w d0,62(a0)
  70.   MOVE.w 12(a0),d2
  71.   MULU d0,d2
  72.   LSR.w #6,d2
  73.   MOVE.w d2,64(a0)
  74.   MOVE.w d2,8(a1)
  75.   LEA QC_chan4-QC_chan1(a0),a0
  76.   LEA $30(a1),a1
  77.   DBRA d1,SetVolL
  78.   MOVEM.l (a7)+,d1-d2
  79.   MOVE.w d1,d0
  80.   MULU d2,d0
  81.   LSR.w #6,d0
  82.   LEA QC_chan2(pc),a0
  83.   LEA $dff0b0,a1
  84.   MOVEQ #2-1,d1
  85.  
  86. .SetVolR:
  87.   MOVE.w d0,62(a0)
  88.   MOVE.w 12(a0),d2
  89.   MULU d0,d2
  90.   LSR.w #6,d2
  91.   MOVE.w d2,64(a0)
  92.   MOVE.w d2,8(a1)
  93.   LEA QC_chan3-QC_chan2(a0),a0
  94.   LEA $10(a1),a1
  95.   DBRA d1,SetVolR
  96.   RTS
  97.  
  98. ;*-----------------------------------------------------------------------*
  99. ;
  100. ; QuadraComposer2.1-Replay
  101.  
  102. ;** This is a CIA replayroutine For EMOD's **
  103. ;** It handles all commands AND tempo      **
  104. ;** You may INCLUDE this in your own       **
  105. ;** applications, If you wish...           **
  106. ;** If you want To Use this routinne in a  **
  107. ;** player, you should write a "smart"     **
  108. ;** load routine, which allocates a        **
  109. ;** specific memory range For each sample  **
  110. ;** AND pattern etc.                       **
  111. ;**                          /Bo Lincoln   **
  112.  
  113. .QC_reloc:
  114.   MOVE.l a0,d1  ;pointer to module
  115.   CMP.l #"FORM",(a0)
  116.   BNE QC_initerr
  117.   CMP.l #"EMOD",8(a0)
  118.   BNE QC_initerr
  119.   CMP.l #"EMIC",12(a0)
  120.   BNE QC_initerr
  121.   CMP.w #1,20(a0)
  122.   BNE QC_initerr
  123.   MOVE.w #256-1,d7
  124.   LEA QC_samplepointers,a1
  125.  
  126. .QC_spclear:
  127.   MOVE.l #QC_quietsamp,(a1)+
  128.   DBRA d7,QC_spclear
  129.   MOVEQ #0,d7       ;Get the adresses to the sampleinfos
  130.   MOVE.b 62(a0),QC_tempo+1
  131.   MOVE.b 63(a0),d7  ;and init the real adresses in the infos
  132.   SUBQ #1,d7
  133.   LEA 64(a0),a0
  134.   LEA QC_samplepointers,a1
  135.  
  136. .QC_sploop:
  137.   MOVEQ #0,d0
  138.   MOVE.b (a0),d0
  139.   ADD.w d0,d0
  140.   ADD.w d0,d0
  141.  
  142.   MOVE.l a0,a1
  143.   ADD.w d0,a1
  144. ;  MOVE.l a0,(a1,d0.w)
  145.  
  146.   ADD.l d1,30(a0)
  147.   MOVE.l 30(a0),a2
  148.   CLR.w (a2)
  149.   LEA 34(a0),a0
  150.   DBF d7,QC_sploop
  151.   LEA QC_patternpointers,a1 ;Get the patternadresses
  152.   MOVEQ #0,d7
  153.   ADDQ #1,a0
  154.   MOVE.b (a0)+,d7
  155.   SUBQ #1,d7
  156.  
  157. .QC_pploop:
  158.   MOVEQ #0,d0
  159.   MOVE.b (a0),d0
  160.   ADD.w d0,d0
  161.   ADD.w d0,d0
  162.  
  163.   MOVE.l a0,a1
  164.   ADD.w d0,a1
  165. ;  MOVE.l a0,(a1,d0.w)
  166.  
  167.   ADD.l d1,22(a0)
  168.   LEA 26(a0),a0
  169.   DBF d7,QC_pploop
  170.   CLR.w QC_nrofpos
  171.   MOVE.b (a0)+,QC_nrofpos+1
  172.   MOVE.l a0,QC_posstart
  173.   MOVE.l #1776200,QC_ciaspeed
  174.   MOVEQ #0,d0
  175.   RTS
  176.  
  177. .QC_initerr:
  178.   MOVEQ #-1,d0
  179.   RTS
  180.  
  181. .QC_init:
  182.   MOVE.l QC_posstart(pc),a0
  183.   LEA QC_patternpointers,a1
  184.   MOVEQ #0,d0
  185.   MOVE.b (a0),d0
  186.   ADD.w d0,d0
  187.   ADD.w d0,d0
  188.  
  189.   ADD.w d0,a1
  190. ;  MOVE.l (a1,d0.w),a1
  191.  
  192.   MOVE.l 22(a1),QC_currpattpointer
  193.   MOVE.b 1(a1),QC_breakrow+1
  194.   MOVE.w #6,QC_speed
  195.   MOVE.w QC_speed(pc),QC_speedcount
  196.   CLR.b QC_newposflag
  197.   CLR.w QC_rowcount
  198.   CLR.w QC_pos
  199.   OR.b #1,QC_event
  200.   MOVE.w #1,14+QC_chan1
  201.   MOVE.w #1,14+QC_chan2
  202.   MOVE.w #1,14+QC_chan3
  203.   MOVE.w #1,14+QC_chan4
  204.   MOVE.w #1,8+QC_chan1
  205.   MOVE.w #1,8+QC_chan2
  206.   MOVE.w #1,8+QC_chan3
  207.   MOVE.w #1,8+QC_chan4
  208.   ST QC_introrow  ;You must reset this every time
  209.                   ;you restart the module
  210.  
  211. ;  MOVE.l a0,-(sp)
  212. ;  MOVE.l delibase(pc),a0      ; added by Delirium
  213. ;  MOVE.l QC_ciaspeed,d0
  214. ;  DIVU #125,d0
  215. ;  MOVE.w d0,dtg_Timer(a0)
  216. ;  MOVE.l (sp)+,a0
  217.  
  218. .QC_end:
  219.   MOVE.w #$f,$dff096
  220.   CLR.w $dff0a8
  221.   CLR.w $dff0b8
  222.   CLR.w $dff0c8
  223.   CLR.w $dff0d8
  224.   RTS
  225.  
  226. ;**********************************************
  227. ;;;******** Replayrutinen + interrupt *********
  228. ;**********************************************
  229.  
  230. .QC_music:  ;Ny (hela replayen)
  231.   ADDQ #1,QC_speedcount
  232.   MOVE.w QC_speed,d0
  233.   CMP.w QC_speedcount,d0
  234.   BGT QC_nonew
  235.   TST.b QC_pattwait
  236.   BEQ QC_getnotes
  237.   SUBQ.b #1,QC_pattwait
  238.   CLR.w QC_speedcount
  239.  
  240. .QC_nonew:
  241.   LEA QC_samplepointers,a4
  242.   LEA QC_periods(pc),a3
  243.   LEA QC_chan1(pc),a6
  244.   LEA $dff0a0,a5
  245.   BSR QC_chkplayfx
  246.   LEA QC_chan2-QC_chan1(a6),a6
  247.   LEA $10(a5),a5
  248.   BSR QC_chkplayfx
  249.   LEA QC_chan2-QC_chan1(a6),a6
  250.   LEA $10(a5),a5
  251.   BSR QC_chkplayfx
  252.   LEA QC_chan2-QC_chan1(a6),a6
  253.   LEA $10(a5),a5
  254.   BSR QC_chkplayfx
  255.   TST.w QC_dmacon
  256.   BEQ QC_mend
  257.   MOVE.w QC_dmacon(pc),$dff096
  258.   OR.w #$8000,QC_dmacon
  259.   MOVE.w QC_dmacon(pc),$dff096
  260.   CLR.w QC_dmacon
  261.   LEA QC_chan1+4(pc),a0
  262.   LEA $dff000,a5
  263.   MOVE.l (a0),d0
  264.   CMP.l #$c00000,d0
  265.   BLT ok11
  266.   SUB.l #$b80000,d0
  267.  
  268. .ok11:
  269.   MOVE.l d0,$a0(a5)
  270.   MOVE.w 4(a0),$a4(a5)
  271.   MOVE.l QC_chan2-QC_chan1(a0),d0
  272.   CMP.l #$c00000,d0
  273.   BLT ok21
  274.   SUB.l #$b80000,d0
  275.  
  276. .ok21:
  277.   MOVE.l d0,$b0(a5)
  278.   MOVE.w 4+QC_chan2-QC_chan1(a0),$b4(a5)
  279.   MOVE.l QC_chan3-QC_chan1(a0),d0
  280.   CMP.l #$c00000,d0
  281.   BLT ok31
  282.   SUB.l #$b80000,d0
  283.  
  284. .ok31:
  285.   MOVE.l d0,$c0(a5)
  286.   MOVE.w 4+QC_chan3-QC_chan1(a0),$c4(a5)
  287.   MOVE.l QC_chan4-QC_chan1(a0),d0
  288.   CMP.l #$c00000,d0
  289.   BLT ok41
  290.   SUB.l #$b80000,d0
  291.  
  292. .ok41:
  293.   MOVE.l d0,$d0(a5)
  294.   MOVE.w 4+QC_chan4-QC_chan1(a0),$d4(a5)
  295.   RTS
  296.  
  297. .QC_chkplayfx:
  298.   LEA QC_playfx(pc),a2
  299.   MOVE.b 2(a6),d0
  300.   AND.w #$f,d0
  301.   ADD.w d0,d0
  302.   ADD.w d0,d0
  303.  
  304.   MOVE.l a2,a0
  305.   ADD.w d0,a0
  306. ;  MOVE.l (a2,d0.w),a0
  307.  
  308.   JMP (a0)
  309.  
  310. .QC_getnotes:
  311.   TST.b QC_introrow
  312.   BNE QC_ok
  313.   TST.b QC_event
  314.   BEQ QC_tstnewpos
  315.   BTST #0,QC_event
  316.   BEQ QC_tstnewpos
  317.  
  318.   MOVE.l d0,-(a7)
  319.   MOVE.b QC_event,d0
  320.   AND.b #$fe,d0
  321.   MOVE.b d0,QC_event
  322.   MOVE.l (a7)+,d0
  323. ;  AND.b #$fe,QC_event
  324.  
  325. .QC_settempo:
  326.   MOVE.l QC_ciaspeed,d0
  327.   DIVU QC_tempo,d0
  328.  
  329. QC_ciab:
  330.  
  331. ;  MOVE.l a0,-(sp)
  332. ;  MOVE.l delibase(pc),a0      ; added by Delirium
  333. ;  MOVE.w d0,dtg_Timer(a0)
  334. ;  MOVE.l dtg_SetTimer(a0),a0
  335. ;  JSR (a0)
  336. ;  MOVE.l (sp)+,a0
  337.  
  338. .QC_tstnewpos:
  339.   TST.b QC_newposflag
  340.   BEQ QC_tstend
  341.   CLR.b QC_newposflag
  342.   MOVE.w QC_newposnr,QC_pos ;Ny
  343.   BRA QC_newpos
  344.  
  345. .QC_tstend:
  346.   TST.b QC_jumpbreakflag
  347.   BEQ QC_tstend2
  348.   CLR.b QC_jumpbreakflag
  349.   MOVE.w QC_looprow(pc),d0
  350.   CMP.w QC_breakrow(pc),d0
  351.   BGT QC_ok
  352.   MOVE.w d0,QC_rowcount
  353.   BRA QC_ok
  354.  
  355. .QC_tstend2:
  356.   ADDQ.w #1,QC_rowcount
  357.   MOVE.w QC_rowcount(pc),d0
  358.   CMP.w QC_breakrow(pc),d0
  359.   BLE QC_ok
  360.   TST.b QC_playpatt
  361.   BNE QC_nonewpatt
  362.   ADDQ.w #1,QC_pos
  363.  
  364. .QC_newpos:
  365.   MOVE.w QC_pos(pc),d0
  366.   CMP.w QC_nrofpos(pc),d0
  367.   BLT QC_getpos
  368.   CLR.w QC_pos
  369.  
  370. ;  MOVE.l a0,-(sp)
  371. ;  MOVE.l delibase(pc),a0      ; added by Delirium
  372. ;  MOVE.l dtg_SongEnd(a0),a0
  373. ;  JSR (a0)
  374. ;  MOVE.l (sp)+,a0
  375.  
  376.   MOVEQ #0,d0
  377.  
  378. .QC_getpos:
  379.   MOVE.w d0,-(a7)
  380.   MOVE.w QC_pos,d0
  381.   MOVE.w (a7)+,d0
  382.   MOVE.l QC_posstart,a0
  383.  
  384.   ADD.w d0,a0
  385.   MOVE.b a0,d0
  386.   SUB.w d0,a0
  387. ;  MOVE.b (a0,d0.w),d0
  388.  
  389.   MOVE.w d0,QC_currpatt
  390.   ADD.w d0,d0
  391.   ADD.w d0,d0
  392.   LEA QC_patternpointers,a0
  393.  
  394.   ADD.l a0,a0
  395.   ADD.w d0,a0
  396. ;  MOVE.l (a0,d0.w),a0
  397.  
  398.   MOVE.l 22(a0),QC_currpattpointer
  399.   MOVE.b 1(a0),QC_breakrow+1
  400.   MOVE.w QC_newrow(pc),QC_rowcount
  401.   CLR.w QC_newrow
  402.   MOVE.w QC_breakrow,d0
  403.   CMP.w QC_rowcount,d0
  404.   BGE QC_ok
  405.   MOVE.w d0,QC_rowcount
  406.   BRA QC_ok
  407.  
  408. .QC_nonewpatt:
  409.   CLR.w QC_rowcount
  410.  
  411. .QC_ok:
  412.   SF QC_introrow
  413.   CLR.w QC_speedcount
  414.   MOVE.l QC_currpattpointer(pc),a0
  415.   MOVE.w QC_rowcount(pc),d0
  416.   ASL.w #4,d0
  417.   ADD.w d0,a0
  418.   LEA QC_samplepointers,a4
  419.   LEA QC_periods(pc),a3
  420.   LEA $dff0a0,a5
  421.   LEA QC_chan1(pc),a6
  422.   BSR QC_playnote
  423.   LEA $10(a5),a5
  424.   LEA QC_chan2-QC_chan1(a6),a6
  425.   BSR QC_playnote
  426.   LEA $10(a5),a5
  427.   LEA QC_chan2-QC_chan1(a6),a6
  428.   BSR QC_playnote
  429.   LEA $10(a5),a5
  430.   LEA QC_chan2-QC_chan1(a6),a6
  431.   BSR QC_playnote
  432.   TST.w QC_dmacon
  433.   BEQ QC_update
  434.   MOVE.w QC_dmacon(pc),$dff096
  435.   OR.w #$8000,QC_dmacon
  436.   MOVE.w QC_dmacon(pc),$dff096
  437.   CLR.w QC_dmacon
  438.   LEA QC_chan1+4(pc),a0
  439.   LEA $dff000,a5
  440.   MOVE.l (a0),d0
  441.   CMP.l #$c00000,d0
  442.   BLT ok12
  443.   SUB.l #$b80000,d0
  444.  
  445. .ok12:
  446.   MOVE.l d0,$a0(a5)
  447.   MOVE.w 4(a0),$a4(a5)
  448.   MOVE.l QC_chan2-QC_chan1(a0),d0
  449.   CMP.l #$c00000,d0
  450.   BLT ok22
  451.   SUB.l #$b80000,d0
  452.  
  453. .ok22:
  454.   MOVE.l d0,$b0(a5)
  455.   MOVE.w 4+QC_chan2-QC_chan1(a0),$b4(a5)
  456.   MOVE.l QC_chan3-QC_chan1(a0),d0
  457.   CMP.l #$c00000,d0
  458.   BLT ok32
  459.   SUB.l #$b80000,d0
  460.  
  461. .ok32:
  462.   MOVE.l d0,$c0(a5)
  463.   MOVE.w 4+QC_chan3-QC_chan1(a0),$c4(a5)
  464.   MOVE.l QC_chan4-QC_chan1(a0),d0
  465.   CMP.l #$c00000,d0
  466.   BLT ok42
  467.   SUB.l #$b80000,d0
  468.  
  469. .ok42:
  470.   MOVE.l d0,$d0(a5)
  471.   MOVE.w 4+QC_chan4-QC_chan1(a0),$d4(a5)
  472.  
  473. QC_update:
  474.  
  475. .QC_mend:
  476.   RTS
  477.  
  478. .QC_playnote:
  479.   MOVE.l (a0)+,(a6)
  480.   MOVEQ #0,d0
  481.   MOVE.b (a6),d0
  482.   BEQ QC_isnote
  483.   ADD.w d0,d0
  484.   ADD.w d0,d0
  485.  
  486.   MOVE.l a4,a1
  487.   ADD.w d0,a1
  488. ;  MOVE.l (a4,d0.w),a1
  489.  
  490.   MOVE.b 1(a1),12+1(a6)
  491.   MOVE.w 2(a1),14(a6)
  492.   MOVE.b 25(a1),d0
  493.   AND.w #$f,d0
  494.   ADD.w d0,d0
  495.   ADD.w d0,d0
  496.  
  497.   MOVE.l a3,42(a6)
  498.   ADD.w d0,42(a6)
  499. ;  MOVE.l (a3,d0.w),42(a6)
  500.  
  501.   MOVE.l 30(a1),d1
  502.   MOVE.l d1,18(a6)
  503.   MOVE.l d1,56(a6)
  504.   CLR.w 8(a5)
  505.   TST.b 60(a6)
  506.   BEQ novol
  507.   MOVE.w 12(a6),d0
  508.   MULU 62(a6),d0
  509.   LSR.w #6,d0
  510.   MOVE.w d0,64(a6)
  511.   MOVE.w d0,8(a5)
  512.  
  513. .novol:
  514.   BTST #0,24(a1)
  515.   BEQ noloop
  516.   MOVEQ #0,d0
  517.   MOVE.w 26(a1),d0
  518.   MOVE.w d0,52(a6)
  519.   ADD.l d0,d1
  520.   ADD.l d0,d1
  521.   MOVE.l d1,4(a6)
  522.   MOVEQ #0,d0
  523.   MOVE.w 26(a1),d0
  524.   MOVEQ #0,d1
  525.   MOVE.w 28(a1),d1
  526.   ADD.l d0,d1
  527.   MOVE.w d1,14(a6)
  528.   MOVE.w 28(a1),8(a6)
  529.   BRA QC_isnote
  530.  
  531. .noloop:
  532.   MOVE.l #QC_quiet,4(a6)
  533.   CLR.w 52(a6)
  534.   MOVE.w #$1,8(a6)
  535.  
  536. .QC_isnote:
  537.   TST.b 1(a6)
  538.   BLT QC_chkfirstfx
  539.   MOVE.b 1(a6),24+1(a6) ;Ny (flyttad)
  540.   MOVE.w 2(a6),d0
  541.   AND.w #$ff0,d0
  542.   CMP.w #$e50,d0
  543.   BEQ QC_setfinetunefirst
  544.   AND.w #$f00,d0
  545.   CMP.w #$300,d0
  546.   BEQ QC_settoneport
  547.   CMP.w #$500,d0
  548.   BEQ QC_settoneport
  549.  
  550. .QC_getper:
  551.   MOVE.w 24(a6),d0
  552.   ADD.w d0,d0
  553.   MOVE.l 42(a6),a2
  554.  
  555.   MOVE.w a2,10(a6)
  556.   ADD.w d0,10(a6)
  557. ;  MOVE.w (a2,d0.w),10(a6)
  558.  
  559.   MOVE.w 2(a6),d0
  560.   AND.w #$ff0,d0
  561.   CMP.w #$ed0,d0
  562.   BEQ QC_notedelay
  563.   MOVE.w 22(a6),d0
  564.   OR.w d0,QC_dmacon
  565.   MOVE.l 18(a6),d0
  566.   CMP.l #$c00000,d0
  567.   BLT ok3
  568.   SUB.l #$b80000,d0
  569.  
  570. .ok3:
  571.   MOVE.l d0,(a5)
  572.   CLR.l 46(a6)
  573.   MOVE.b (a6),51(a6)
  574.   MOVE.w 14(a6),54(a6)
  575.   SF 41(a6)
  576.   ST 50(a6)
  577.   MOVE.w 14(a6),4(a5)
  578.   MOVE.w 10(a6),6(a5)
  579.  
  580. .QC_chkfirstfx:
  581.   LEA QC_fxaftersetperiod(pc),a2
  582.   MOVEQ #0,d0
  583.   MOVE.b 2(a6),d0
  584.   ADD.w d0,d0
  585.   ADD.w d0,d0
  586.  
  587.   ADD.l a2,a2
  588.   ADD.w d0,a2
  589. ;  MOVE.l (a2,d0.w),a2
  590.  
  591.   JMP (a2)
  592.  
  593. .QC_setfinetunefirst:
  594.   MOVE.b 3(a6),d0
  595.   ADD.w d0,d0
  596.   ADD.w d0,d0
  597.  
  598.   MOVE.l a3,42(a6)
  599.   ADD.w d0,42(a6)
  600. ;  MOVE.l (a3,d0.w),42(a6)
  601.  
  602.   BRA QC_getper
  603.  
  604. .QC_ecommands:
  605.   LEA QC_efx(pc),a2
  606.   MOVE.b 3(a6),d0
  607.   AND.w #$f0,d0
  608.   LSR.w #2,d0
  609.  
  610.   ADD.l a2,a2
  611.   ADD.w d0,a2
  612. ;  MOVE.l (a2,d0.w),a2
  613.  
  614.   JMP (a2)
  615.  
  616. .QC_playecommands:
  617.   LEA QC_playefx(pc),a2
  618.   MOVE.b 3(a6),d0
  619.   AND.w #$f0,d0
  620.   LSR.w #2,d0
  621.  
  622.   ADD.l a2,a2
  623.   ADD.w d0,a2
  624. ;  MOVE.l (a2,d0.w),a2
  625.  
  626.   JMP (a2)
  627.  
  628. ;********** Effect commands **********
  629.  
  630. .QC_arpeggio: ;Ny
  631.   TST.b 3(a6)
  632.   BEQ QC_mend
  633.   LEA QC_arptbl,a2
  634.   MOVE.w QC_speedcount,d0
  635.  
  636.   ADD.w a2,d0
  637.   TST.b d0
  638. ;  tst.b (a2,d0.w)
  639.  
  640.   BEQ QC_arp2
  641.   MOVE.w QC_speedcount,d0
  642.   BLT QC_arp1
  643.   MOVE.b 3(a6),d0
  644.   AND.w #$f,d0
  645.   ADD.w 24(a6),d0
  646.   ADD.w d0,d0
  647.   MOVE.l 42(a6),a2
  648.  
  649.   MOVE.w a2,6(a5)
  650.   ADD.w d0,6(a5)
  651. ;  MOVE.w (a2,d0.w),6(a5)
  652.  
  653.   RTS
  654.  
  655. .QC_arp1:
  656.   MOVE.w 10(a6),6(a5)
  657.   RTS
  658.  
  659. .QC_arp2:
  660.   MOVE.w QC_speedcount,d0
  661.   MOVEQ #0,d0
  662.   MOVE.b 3(a6),d0
  663.   LSR.w #4,d0
  664.   ADD.w 24(a6),d0
  665.   ADD.w d0,d0
  666.   MOVE.l 42(a6),a2
  667.  
  668.   MOVE.w a2,6(a5)
  669.   ADD.w d0,6(a5)
  670. ;  MOVE.w (a2,d0.w),6(a5)
  671.  
  672.   RTS
  673.  
  674. .QC_slideup:
  675.   MOVEQ #0,d0
  676.   MOVE.b 3(a6),d0
  677.   SUB.w d0,10(a6)
  678.   CMP.w #113,10(a6)
  679.   BGT QC_sunotlow
  680.   MOVE.w #113,10(a6)
  681.  
  682. .QC_sunotlow:
  683.   MOVE.w 10(a6),6(a5)
  684.   RTS
  685.  
  686. .QC_slidedown:
  687.   MOVEQ #0,d0
  688.   MOVE.b 3(a6),d0
  689.   ADD.w d0,10(a6)
  690.   CMP.w #856,10(a6)
  691.   BLT QC_sdnothigh
  692.   MOVE.w #856,10(a6)
  693.  
  694. .QC_sdnothigh:
  695.   MOVE.w 10(a6),6(a5)
  696.   RTS
  697.  
  698. .QC_settoneport:
  699.   MOVE.w 24(a6),d0
  700.   ADD.w d0,d0
  701.   MOVE.l 42(a6),a2
  702.  
  703.   MOVE.l a2,-(a7)
  704.   ADD.w d0,a2
  705.   MOVE.w a2,d0
  706.   MOVE.l (a7)+,a2
  707. ;  MOVE.w (a2,d0.w),d0
  708.  
  709.   MOVE.w d0,26(a6)
  710.   CMP.w 10(a6),d0
  711.   BGT QC_setportdown
  712.   CLR.b 28(a6)
  713.   RTS
  714.  
  715. .QC_setportdown:
  716.   MOVE.b #1,28(a6)
  717.   RTS
  718.  
  719. .QC_toneport:
  720.   TST.w 26(a6)
  721.   BEQ QC_mend
  722.   MOVEQ #0,d0
  723.   MOVE.b 3(a6),d0
  724.   BEQ QC_tpold
  725.   MOVE.b d0,40(a6)
  726.   TST.b 28(a6)
  727.   BNE QC_portdown
  728.   SUB.w d0,10(a6)
  729.   MOVE.w 26(a6),d0
  730.   CMP.w 10(a6),d0
  731.   BLT QC_notyetwanted
  732.   MOVE.w d0,6(a5)
  733.   MOVE.w d0,10(a6)
  734.   CLR.w 26(a6)
  735.   RTS
  736.  
  737. .QC_tpold:
  738.   MOVE.b 40(a6),d0
  739.   TST.b 28(a6)
  740.   BNE QC_portdown
  741.   SUB.w d0,10(a6)
  742.   MOVE.w 26(a6),d0
  743.   CMP.w 10(a6),d0
  744.   BLT QC_notyetwanted
  745.   MOVE.w d0,6(a5)
  746.   MOVE.w d0,10(a6)
  747.   CLR.w 26(a6)
  748.   RTS
  749.  
  750. .QC_portdown:
  751.   ADD.w d0,10(a6)
  752.   MOVE.w 26(a6),d0
  753.   CMP.w 10(a6),d0
  754.   BGT QC_notyetwanted
  755.   MOVE.w d0,6(a5)
  756.   MOVE.w d0,10(a6)
  757.   CLR.w 26(a6)
  758.   RTS
  759.  
  760. .QC_notyetwanted:
  761.   TST.b 30(a6)
  762.   BEQ QC_nogliss
  763.   MOVE.l 42(a6),a2
  764.   MOVE.w 10(a6),d0
  765.  
  766. .QC_glissloop:
  767.   CMP.w (a2)+,d0
  768.   BLT QC_glissloop
  769.   MOVE.w -2(a2),6(a5)
  770.   RTS
  771.  
  772. .QC_nogliss:
  773.   MOVE.w 10(a6),6(a5)
  774.   RTS
  775.  
  776. .QC_vibrato:
  777.   MOVEQ #0,d0
  778.   MOVE.b 29(a6),d0
  779.   ASL.w #7,d0
  780.   LEA QC_vibtables(pc),a2
  781.   ADD.w d0,a2
  782.   MOVEQ #0,d0
  783.   MOVE.b 3(a6),d0
  784.   BEQ QC_vib
  785.   MOVE.w d0,d1
  786.   AND.b #$f,d0
  787.   BEQ QC_vibusespeed
  788.  
  789.   MOVE.l d0,-(a7)
  790.   MOVE.b 31(a6),d0
  791.   AND.b #$f0,d0
  792.   MOVE.b d0,31(a6)
  793.   MOVE.l (a7)+,d0
  794. ;  AND.b #$f0,31(a6)
  795.  
  796.   OR.b d0,31(a6)
  797.  
  798. .QC_vibusespeed:
  799.   AND.b #$f0,d1
  800.   BEQ QC_vib
  801.  
  802.   MOVE.l d0,-(a7)
  803.   MOVE.b 31(a6),d0
  804.   AND.b #$f,d0
  805.   MOVE.b d0,31(a6)
  806.   MOVE.l (a7)+,d0
  807. ;  AND.b #$f,31(a6)
  808.  
  809.   OR.b d1,31(a6)
  810.  
  811. .QC_vib:
  812.   MOVE.b 31(a6),d0
  813.   LSR.w #3,d0
  814.   ADD.w d0,32(a6)
  815.  
  816.   MOVE.l d0,-(a7)
  817.   MOVE.w 32(a6),d0
  818.   AND.w #$7e,d0
  819.   MOVE.w d0,32(a6)
  820.   MOVE.l (a7)+,d0
  821. ;  AND.w #$7e,32(a6)
  822.  
  823.   MOVE.w 32(a6),d0
  824.   MOVE.w 10(a6),d1
  825.  
  826.   MOVE.l a2,-(a7)
  827.   ADD.w d0,a2
  828.   MOVE.w a2,d0
  829.   MOVE.l (a7)+,a2
  830. ;  MOVE.w (a2,d0.w),d0
  831.  
  832.   MOVE.b 31(a6),d2
  833.   AND.w #$f,d2
  834.   MULS d2,d0
  835.   ADD.l d0,d0
  836.   ADD.l d0,d0
  837.   SWAP d0
  838.   ADD.w d0,d1
  839.   CMP.w #856,d1
  840.   BLT QC_vibnothigh
  841.   MOVE.w #856,6(a5)
  842.   RTS
  843.  
  844. .QC_vibnothigh:
  845.   CMP.w #113,d1
  846.   BGT QC_vibnotlow
  847.   MOVE.w #113,6(a5)
  848.   RTS
  849.  
  850. .QC_vibnotlow:
  851.   MOVE.w d1,6(a5)
  852.   RTS
  853.  
  854. .QC_toneportandvolslide:
  855.   TST.w 26(a6)
  856.   BEQ QC_volslide
  857.   BSR QC_tpold
  858.   BRA QC_volslide
  859.  
  860. .QC_vibratoandvolslide:
  861.   BSR QC_vib
  862.   BRA QC_volslide
  863.  
  864. .QC_tremolo:
  865.   MOVEQ #0,d0
  866.   MOVE.b 34(a6),d0
  867.   ASL.w #7,d0
  868.   LEA QC_vibtables(pc),a2
  869.   ADD.w d0,a2
  870.   MOVEQ #0,d0
  871.   MOVE.b 3(a6),d0
  872.   BEQ QC_trem
  873.   MOVE.w d0,d1
  874.   AND.b #$f,d0
  875.   BEQ QC_tremusespeed
  876.  
  877.   MOVE.l d0,-(a7)
  878.   MOVE.b 35(a6),d0
  879.   AND.b #$f0,d0
  880.   MOVE.b d0,35(a6)
  881.   MOVE.l (a7)+,d0
  882. ;  AND.b #$f0,35(a6)
  883.  
  884.   OR.b d0,35(a6)
  885.  
  886. .QC_tremusespeed:
  887.   AND.b #$f0,d1
  888.   BEQ QC_trem
  889.  
  890.   MOVE.l d0,-(a7)
  891.   MOVE.b 35(a6),d0
  892.   AND.b #$f,d0
  893.   MOVE.b d0,35(a6)
  894.   MOVE.l (a7)+,d0
  895. ;  AND.b #$f,35(a6)
  896.  
  897.   OR.b d1,35(a6)
  898.  
  899. .QC_trem:
  900.   MOVE.b 35(a6),d0
  901.   LSR.w #3,d0
  902.   ADD.w d0,36(a6)
  903.  
  904.   MOVE.l d0,-(a7)
  905.   MOVE.w 36(a6),d0
  906.   AND.w #$7e,d0
  907.   MOVE.w d0,36(a6)
  908.   MOVE.l (a7)+,d0
  909. ;  AND.w #$7e,36(a6)
  910.  
  911.   MOVE.w 36(a6),d0
  912.   MOVE.w 12(a6),d1
  913.  
  914.   MOVE.l a2,-(a7)
  915.   ADD.w d0,a2
  916.   MOVE.w a2,d0
  917.   MOVE.l (a7)+,a2
  918. ;  MOVE.w (a2,d0.w),d0
  919.  
  920.   MOVE.b 35(a6),d2
  921.   AND.w #$f,d2
  922.   MULS d2,d0
  923.   ASL.l #3,d0
  924.   SWAP d0
  925.   ADD.w d0,d1
  926.   CMP.w #$40,d1
  927.   BLT QC_tremnothigh
  928.   TST.b 60(a6)
  929.   BEQ QC_mend
  930.   MOVE.w 62(a6),64(a6)
  931.   MOVE.w 62(a6),8(a5)
  932.   RTS
  933.  
  934. .QC_tremnothigh:
  935.   TST.w d1
  936.   BGT QC_tremnotlow
  937.   TST.b 60(a6)
  938.   BEQ QC_mend
  939.   CLR.w 8(a5)
  940.   RTS
  941.  
  942. .QC_tremnotlow:
  943.   TST.b 60(a6)
  944.   BEQ QC_mend
  945.   MULU 62(a6),d1
  946.   LSR.w #6,d1
  947.   MOVE.w d1,64(a6)
  948.   MOVE.w d1,8(a5)
  949.   RTS
  950.  
  951. .QC_sampleoffset:
  952.   MOVEQ #0,d0
  953.   MOVE.b 3(a6),d0
  954.   BEQ QC_sook
  955.   MOVE.b d0,38(a6)
  956.  
  957. .QC_sook:
  958.   MOVE.b 38(a6),d0
  959.   ASL.w #8,d0
  960.   MOVEQ #0,d1
  961.   MOVE.w 14(a6),d1
  962.   MOVE.w d1,54(a6)
  963.   MOVE.l d0,46(a6)
  964.   SUB.l d0,d1
  965.   BLE QC_sotoolong
  966.   MOVE.w d1,14(a6)
  967.   ADD.l d0,d0
  968.   ADD.l d0,18(a6)
  969.   MOVE.l 18(a6),d0
  970.   CMP.l #$c00000,d0
  971.   BLT ok5
  972.   SUB.l #$b80000,d0
  973.  
  974. .ok5:
  975.   MOVE.l d0,(a5)
  976.   MOVE.b (a6),51(a6)
  977.   SF 41(a6)
  978.   ST 50(a6)
  979.   MOVE.w 14(a6),4(a5)
  980.   RTS
  981.  
  982. .QC_sotoolong:
  983.   MOVE.w #1,14(a6)
  984.   MOVE.w 14(a6),4(a5)
  985.   RTS
  986.  
  987. .QC_volslide:
  988.   MOVEQ #0,d0
  989.   MOVE.b 3(a6),d0
  990.   LSR.w #4,d0
  991.   BEQ QC_volslidedown
  992.   ADD.w d0,12(a6)
  993.   CMP.w #$40,12(a6)
  994.   BLT QC_setvol
  995.   MOVE.w #$40,12(a6)
  996.  
  997. .QC_setvol:
  998.   TST.b 60(a6)
  999.   BEQ QC_mend
  1000.   MOVE.w 12(a6),d0
  1001.   MULU 62(a6),d0
  1002.   LSR.w #6,d0
  1003.   MOVE.w d0,64(a6)
  1004.   MOVE.w d0,8(a5)
  1005.   RTS
  1006.  
  1007. .QC_volslidedown:
  1008.   MOVE.b 3(a6),d0
  1009.   SUB.w d0,12(a6)
  1010.   TST.w 12(a6)
  1011.   BGT QC_setvol
  1012.   CLR.w 12(a6)
  1013.   TST.b 60(a6)
  1014.   BEQ QC_mend
  1015.   CLR.w 8(a5)
  1016.   RTS
  1017.  
  1018. .QC_posjump:  ;Ny
  1019.   MOVE.b 3(a6),d0
  1020.   MOVE.b d0,QC_newposnr+1
  1021.   MOVE.b #1,QC_newposflag
  1022.   CLR.w QC_newrow
  1023.   RTS
  1024.  
  1025. .QC_volumechange:
  1026.   MOVE.b 3(a6),d0
  1027.   CMP.b #$40,d0
  1028.   BCS QC_volchhigh
  1029.   MOVE.w #$40,12(a6)
  1030.   TST.b 60(a6)
  1031.   BEQ QC_mend
  1032.   MOVE.w 62(a6),64(a6)
  1033.   MOVE.w 62(a6),8(a5)
  1034.   RTS
  1035.  
  1036. .QC_volchhigh:
  1037.   MOVE.b d0,12+1(a6)
  1038.   TST.b 60(a6)
  1039.   BEQ QC_mend
  1040.   MOVE.w 12(a6),d0
  1041.   MULU 62(a6),d0
  1042.   LSR.w #6,d0
  1043.   MOVE.w d0,64(a6)
  1044.   MOVE.w d0,8(a5)
  1045.   RTS
  1046.  
  1047. .QC_patternbreak: ;Ny
  1048.   MOVE.w QC_pos,d0
  1049.   ADDQ.w #1,d0
  1050.   MOVE.w d0,QC_newposnr
  1051.   MOVE.b 3(a6),QC_newrow+1
  1052.   MOVE.b #1,QC_newposflag
  1053.   RTS
  1054.  
  1055. .QC_setspeed:
  1056.   MOVE.b 3(a6),d0
  1057.   BEQ QC_setspeed1
  1058.   CMP.b #$1f,d0
  1059.   BHI QC_temposet
  1060.   MOVE.b d0,QC_speed+1
  1061.   CLR.w QC_speedcount
  1062.   RTS
  1063.  
  1064. .QC_setspeed1:
  1065.   MOVE.w #1,QC_speed
  1066.   CLR.w QC_speedcount
  1067.   RTS
  1068.  
  1069. .QC_temposet:
  1070.   MOVE.b d0,QC_tempo+1
  1071.   OR.b #$1,QC_event
  1072.   RTS
  1073.  
  1074. .QC_setfilter:
  1075.   MOVE.b 3(a6),d0
  1076.   AND.b #1,d0
  1077.   ADD.b d0,d0
  1078.  
  1079.   MOVE.l d0,-(a7)
  1080.   MOVE.b $bfe001,d0
  1081.   AND.b #$fd,d0
  1082.   MOVE.b d0,$bfe001
  1083.   MOVE.l (a7)+,d0
  1084. ;  AND.b #$fd,$bfe001
  1085.  
  1086.   OR.b d0,$bfe001
  1087.   RTS
  1088.  
  1089. .QC_fineslideup:
  1090.   MOVE.b 3(a6),d0
  1091.   AND.w #$f,d0
  1092.   SUB.w d0,10(a6)
  1093.   CMP.w #113,10(a6)
  1094.   BGT QC_fsunotlow
  1095.   MOVE.w #113,10(a6)
  1096.  
  1097. .QC_fsunotlow:
  1098.   MOVE.w 10(a6),6(a5)
  1099.   RTS
  1100.  
  1101. .QC_fineslidedown:
  1102.   MOVE.b 3(a6),d0
  1103.   AND.w #$f,d0
  1104.   ADD.w d0,10(a6)
  1105.   CMP.w #856,10(a6)
  1106.   BLT QC_fsdnothigh
  1107.   MOVE.w #856,10(a6)
  1108.  
  1109. .QC_fsdnothigh:
  1110.   MOVE.w 10(a6),6(a5)
  1111.   RTS
  1112.  
  1113. .QC_glisscontrol:
  1114.   MOVE.b 3(a6),30(a6)
  1115.  
  1116.   MOVE.l d0,-(a7)
  1117.   MOVE.b 30(a6),d0
  1118.   AND.b #$ff,d0
  1119.   MOVE.b d0,30(a6)
  1120.   MOVE.l (a7)+,d0
  1121. ;  AND.b #$f,30(a6)
  1122.  
  1123.   RTS
  1124.  
  1125. .QC_vibratowave:
  1126.   MOVE.b 3(a6),29(a6)
  1127.  
  1128.   MOVE.l d0,-(a7)
  1129.   MOVE.b 29(a6),d0
  1130.   AND.b #$f,d0
  1131.   MOVE.b d0,29(a6)
  1132.   MOVE.l (a7)+,d0
  1133. ;  AND.b #$f,29(a6)
  1134.  
  1135.   RTS
  1136.  
  1137. .QC_finetune:
  1138.   MOVE.b 3(a6),d0
  1139.   AND.w #$f,d0
  1140.   ADD.w d0,d0
  1141.   ADD.w d0,d0
  1142.  
  1143.   MOVE.l a3,42(a6)
  1144.   ADD.w d0,42(a6)
  1145. ;  MOVE.l (a3,d0.w),42(a6)
  1146.  
  1147.   RTS
  1148.  
  1149. .QC_jumploop:
  1150.   MOVE.b 3(a6),d0
  1151.   AND.w #$f,d0
  1152.   BEQ QC_saveloop
  1153.   TST.b QC_loopcount
  1154.   BEQ QC_newloop
  1155.   SUBQ.b #1,QC_loopcount
  1156.   BEQ QC_mend
  1157.   MOVE.b #1,QC_jumpbreakflag
  1158.   RTS
  1159.  
  1160. .QC_newloop:
  1161.   MOVE.b d0,QC_loopcount
  1162.   MOVE.b #1,QC_jumpbreakflag
  1163.   RTS
  1164.  
  1165. .QC_saveloop:
  1166.   MOVE.w QC_rowcount(pc),QC_looprow
  1167.   RTS
  1168.  
  1169. .QC_tremolowave:
  1170.   MOVE.b 3(a6),34(a6)
  1171.  
  1172.   MOVE.l d0,-(a7)
  1173.   MOVE.b 34(a6),d0
  1174.   AND.b #$f,d0
  1175.   MOVE.b d0,34(a6)
  1176.   MOVE.l (a7)+,d0
  1177. ;  AND.b #$f,34(a6)
  1178.  
  1179.   RTS
  1180.  
  1181. .QC_initretrig:
  1182.   CLR.b 39(a6)
  1183.  
  1184. .QC_retrignote:
  1185.   ADDQ.b #1,39(a6)
  1186.   MOVE.b 3(a6),d0
  1187.   AND.b #$f,d0
  1188.   CMP.b 39(a6),d0
  1189.   BGT QC_mend
  1190.   CLR.b 39(a6)
  1191.   MOVE.w 22(a6),d0
  1192.   OR.w d0,QC_dmacon
  1193.   MOVE.l 18(a6),d0
  1194.   CMP.l #$c00000,d0
  1195.   BLT ok6
  1196.   SUB.l #$b80000,d0
  1197.  
  1198. .ok6:
  1199.   MOVE.l d0,(a5)
  1200.   CLR.l 46(a6)
  1201.   MOVE.b (a6),51(a6)
  1202.   SF 41(a6)
  1203.   ST 50(a6)
  1204.   MOVE.w 14(a6),4(a5)
  1205.   MOVE.w 10(a6),6(a5)
  1206.   RTS
  1207.  
  1208. .QC_volumefineup:
  1209.   MOVE.b 3(a6),d0
  1210.   AND.w #$f,d0
  1211.   ADD.w d0,12(a6)
  1212.   CMP.w #$40,12(a6)
  1213.   BLT QC_vfuset
  1214.   MOVE.w #$40,12(a6)
  1215.   TST.b 60(a6)
  1216.   BEQ QC_mend
  1217.   MOVE.w 62(a6),64(a6)
  1218.   MOVE.w 62(a6),8(a5)
  1219.   RTS
  1220.  
  1221. .QC_vfuset:
  1222.   TST.b 60(a6)
  1223.   BEQ QC_mend
  1224.   MOVE.w 12(a6),d0
  1225.   MULU 62(a6),d0
  1226.   LSR.w #6,d0
  1227.   MOVE.w d0,64(a6)
  1228.   MOVE.w d0,8(a5)
  1229.   RTS
  1230.  
  1231. .QC_volumefinedown:
  1232.   MOVE.b 3(a6),d0
  1233.   AND.w #$f,d0
  1234.   SUB.w d0,12(a6)
  1235.   BGE QC_vfdset
  1236.   CLR.w 12(a6)
  1237.   TST.b 60(a6)
  1238.   BEQ QC_mend
  1239.   CLR.w 8(a5)
  1240.   RTS
  1241.  
  1242. .QC_vfdset:
  1243.   TST.b 60(a6)
  1244.   BEQ QC_mend
  1245.   MOVE.w 12(a6),d0
  1246.   MULU 62(a6),d0
  1247.   LSR.w #6,d0
  1248.   MOVE.w d0,64(a6)
  1249.   MOVE.w d0,8(a5)
  1250.   RTS
  1251.  
  1252. .QC_notecut:
  1253.   MOVEQ #0,d1
  1254.   MOVE.b 3(a6),d1
  1255.   AND.b #$f,d1
  1256.   CMP.w QC_speedcount(pc),d1
  1257.   BGT QC_mend
  1258.   CLR.w 12(a6)
  1259.   TST.b 60(a6)
  1260.   BEQ QC_mend
  1261.   CLR.w 8(a5)
  1262.   RTS
  1263.  
  1264. .QC_notedelay:
  1265.   MOVEQ #0,d1
  1266.   TST.b 1(a6)
  1267.   BLT QC_mend
  1268.   MOVE.b 3(a6),d1
  1269.   AND.b #$f,d1
  1270.   CMP.w QC_speedcount(pc),d1
  1271.   BNE QC_mend
  1272.   MOVE.w 22(a6),d0
  1273.   OR.w d0,QC_dmacon
  1274.   MOVE.l 18(a6),d0
  1275.   CMP.l #$c00000,d0
  1276.   BLT ok7
  1277.   SUB.l #$b80000,d0
  1278.  
  1279. .ok7:
  1280.   MOVE.l d0,(a5)
  1281.   CLR.l 46(a6)
  1282.   MOVE.b (a6),51(a6)
  1283.   SF 41(a6)
  1284.   ST 50(a6)
  1285.   MOVE.w 14(a6),4(a5)
  1286.   MOVE.w 10(a6),6(a5)
  1287.   RTS
  1288.  
  1289. .QC_patterndelay:
  1290.   MOVE.b 3(a6),QC_pattwait
  1291.  
  1292.   MOVE.l d0,-(a7)
  1293.   MOVE.b QC_pattwait,d0
  1294.   AND.b #$f,d0
  1295.   MOVE.b d0,QC_pattwait
  1296.   MOVE.l (a7)+,d0
  1297. ;  AND.b #$f,QC_pattwait
  1298.  
  1299.   RTS
  1300.  
  1301. .QC_arptbl:
  1302.   Dc.b -1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1
  1303.   Dc.b -1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1
  1304.   Dc.b -1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1
  1305.   Dc.b -1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1
  1306.   Dc.b -1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1
  1307.   Dc.b -1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1
  1308.  
  1309. .QC_playfx:
  1310.   Dc.l QC_arpeggio
  1311.   Dc.l QC_slideup
  1312.   Dc.l QC_slidedown
  1313.   Dc.l QC_toneport
  1314.   Dc.l QC_vibrato
  1315.   Dc.l QC_toneportandvolslide
  1316.   Dc.l QC_vibratoandvolslide
  1317.   Dc.l QC_tremolo
  1318.   Dc.l QC_mend
  1319.   Dc.l QC_mend
  1320.   Dc.l QC_volslide
  1321.   Dc.l QC_mend
  1322.   Dc.l QC_mend
  1323.   Dc.l QC_mend
  1324.   Dc.l QC_playecommands
  1325.   Dc.l QC_mend
  1326.  
  1327. .QC_playefx:
  1328.   Dc.l QC_mend
  1329.   Dc.l QC_mend
  1330.   Dc.l QC_mend
  1331.   Dc.l QC_mend
  1332.   Dc.l QC_mend
  1333.   Dc.l QC_mend
  1334.   Dc.l QC_mend
  1335.   Dc.l QC_mend
  1336.   Dc.l QC_mend
  1337.   Dc.l QC_retrignote
  1338.   Dc.l QC_mend
  1339.   Dc.l QC_mend
  1340.   Dc.l QC_notecut
  1341.   Dc.l QC_notedelay
  1342.   Dc.l QC_mend
  1343.   Dc.l QC_mend
  1344.  
  1345. .QC_efx:
  1346.   Dc.l QC_setfilter
  1347.   Dc.l QC_fineslideup
  1348.   Dc.l QC_fineslidedown
  1349.   Dc.l QC_glisscontrol
  1350.   Dc.l QC_vibratowave
  1351.   Dc.l QC_finetune
  1352.   Dc.l QC_jumploop
  1353.   Dc.l QC_tremolowave
  1354.   Dc.l QC_mend
  1355.   Dc.l QC_initretrig
  1356.   Dc.l QC_volumefineup
  1357.   Dc.l QC_volumefinedown
  1358.   Dc.l QC_notecut
  1359.   Dc.l QC_notedelay
  1360.   Dc.l QC_patterndelay
  1361.   Dc.l QC_mend
  1362.  
  1363. .QC_fxaftersetperiod:
  1364.   Dc.l QC_arpeggio
  1365.   Dc.l QC_mend
  1366.   Dc.l QC_mend
  1367.   Dc.l QC_mend
  1368.   Dc.l QC_mend
  1369.   Dc.l QC_mend
  1370.   Dc.l QC_mend
  1371.   Dc.l QC_mend
  1372.   Dc.l QC_mend
  1373.   Dc.l QC_sampleoffset
  1374.   Dc.l QC_mend
  1375.   Dc.l QC_posjump
  1376.   Dc.l QC_volumechange
  1377.   Dc.l QC_patternbreak
  1378.   Dc.l QC_ecommands
  1379.   Dc.l QC_setspeed
  1380.  
  1381. .QC_vibtables:
  1382.   Dc.w 0,3211,6392,9511,12539,15446,18204,20787,23169,25329
  1383.   Dc.w 27244,28897,30272,31356,32137,32609,32767,32609,32137
  1384.   Dc.w 31356,30272,28897,27244,25329,23169,20787,18204,15446
  1385.   Dc.w 12539,9511,6392,3211
  1386.   Dc.w 0,-3211,-6392,-9511,-12539,-15446,-18204,-20787,-23169,-25329
  1387.   Dc.w -27244,-28897,-30272,-31356,-32137,-32609,-32767,-32609,-32137
  1388.   Dc.w -31356,-30272,-28897,-27244,-25329,-23169,-20787,-18204,-15446
  1389.   Dc.w -12539,-9511,-6392,-3211
  1390.   Dc.w 32767,31744,30720,29696,28672,27648,26624,25600,24576,23552
  1391.   Dc.w 22528,21504,20480,19456,18432,17408,16384,15360,14336,13312
  1392.   Dc.w 12288,11264,10240,9216,8192,7168,6144,5120,4096,3072,2048,1024
  1393.   Dc.w 0,-1024,-2048,-3072,-4096,-5120,-6144,-8168,-8192,-9216,-10240
  1394.   Dc.w -11264,-12288,-13312,-14336,-15360,-16384,-17408,-18432,-19456
  1395.   Dc.w -20480,-21504,-22528,-23552,-24576,-25600,-26624,-27648,-28672
  1396.   Dc.w -29696,-30720,-31744,-32768
  1397.   Dc.w 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767
  1398.   Dc.w 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767
  1399.   Dc.w 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767
  1400.   Dc.w 32767,32767
  1401.   Dc.w -32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767
  1402.   Dc.w -32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767
  1403.   Dc.w -32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767
  1404.   Dc.w -32767,-32767
  1405.  
  1406. .QC_periods:
  1407.   Dc.l QC_periodtable
  1408.   Dc.l QC_periodtable+72
  1409.   Dc.l QC_periodtable+144
  1410.   Dc.l QC_periodtable+216
  1411.   Dc.l QC_periodtable+288
  1412.   Dc.l QC_periodtable+360
  1413.   Dc.l QC_periodtable+432
  1414.   Dc.l QC_periodtable+504
  1415.   Dc.l QC_periodtable+576
  1416.   Dc.l QC_periodtable+648
  1417.   Dc.l QC_periodtable+720
  1418.   Dc.l QC_periodtable+792
  1419.   Dc.l QC_periodtable+864
  1420.   Dc.l QC_periodtable+936
  1421.   Dc.l QC_periodtable+1008
  1422.   Dc.l QC_periodtable+1080
  1423.  
  1424. QC_periodtable:
  1425.   Dc.w  856,808,762,720,678,640,604,570,538,508,480,453
  1426.   Dc.w  428,404,381,360,339,320,302,285,269,254,240,226
  1427.   Dc.w  214,202,190,180,170,160,151,143,135,127,120,113
  1428.   Dc.w  850,802,757,715,674,637,601,567,535,505,477,450
  1429.   Dc.w  425,401,379,357,337,318,300,284,268,253,239,225
  1430.   Dc.w  213,201,189,179,169,159,150,142,134,126,119,113
  1431.   Dc.w  844,796,752,709,670,632,597,563,532,502,474,447
  1432.   Dc.w  422,398,376,355,335,316,298,282,266,251,237,224
  1433.   Dc.w  211,199,188,177,167,158,149,141,133,125,118,112
  1434.   Dc.w  838,791,746,704,665,628,592,559,528,498,470,444
  1435.   Dc.w  419,395,373,352,332,314,296,280,264,249,235,222
  1436.   Dc.w  209,198,187,176,166,157,148,140,132,125,118,111
  1437.   Dc.w  832,785,741,699,660,623,588,555,524,495,467,441
  1438.   Dc.w  416,392,370,350,330,312,294,278,262,247,233,220
  1439.   Dc.w  208,196,185,175,165,156,147,139,131,124,117,110
  1440.   Dc.w  826,779,736,694,655,619,584,551,520,491,463,437
  1441.   Dc.w  413,390,368,347,328,309,292,276,260,245,232,219
  1442.   Dc.w  206,195,184,174,164,155,146,138,130,123,116,109
  1443.   Dc.w  820,774,730,689,651,614,580,547,516,487,460,434
  1444.   Dc.w  410,387,365,345,325,307,290,274,258,244,230,217
  1445.   Dc.w  205,193,183,172,163,154,145,137,129,122,115,109
  1446.   Dc.w  814,768,725,684,646,610,575,543,513,484,457,431
  1447.   Dc.w  407,384,363,342,323,305,288,272,256,242,228,216
  1448.   Dc.w  204,192,181,171,161,152,144,136,128,121,114,108
  1449.   Dc.w  907,856,808,762,720,678,640,604,570,538,508,480
  1450.   Dc.w  453,428,404,381,360,339,320,302,285,269,254,240
  1451.   Dc.w  226,214,202,190,180,170,160,151,143,135,127,120
  1452.   Dc.w  900,850,802,757,715,675,636,601,567,535,505,477
  1453.   Dc.w  450,425,401,379,357,337,318,300,284,268,253,238
  1454.   Dc.w  225,212,200,189,179,169,159,150,142,134,126,119
  1455.   Dc.w  894,844,796,752,709,670,632,597,563,532,502,474
  1456.   Dc.w  447,422,398,376,355,335,316,298,282,266,251,237
  1457.   Dc.w  223,211,199,188,177,167,158,149,141,133,125,118
  1458.   Dc.w  887,838,791,746,704,665,628,592,559,528,498,470
  1459.   Dc.w  444,419,395,373,352,332,314,296,280,264,249,235
  1460.   Dc.w  222,209,198,187,176,166,157,148,140,132,125,118
  1461.   Dc.w  881,832,785,741,699,660,623,588,555,524,494,467
  1462.   Dc.w  441,416,392,370,350,330,312,294,278,262,247,233
  1463.   Dc.w  220,208,196,185,175,165,156,147,139,131,123,117
  1464.   Dc.w  875,826,779,736,694,655,619,584,551,520,491,463
  1465.   Dc.w  437,413,390,368,347,328,309,292,276,260,245,232
  1466.   Dc.w  219,206,195,184,174,164,155,146,138,130,123,116
  1467.   Dc.w  868,820,774,730,689,651,614,580,547,516,487,460
  1468.   Dc.w  434,410,387,365,345,325,307,290,274,258,244,230
  1469.   Dc.w  217,205,193,183,172,163,154,145,137,129,122,115
  1470.   Dc.w  862,814,768,725,684,646,610,575,543,513,484,457
  1471.   Dc.w  431,407,384,363,342,323,305,288,272,256,242,228
  1472.   Dc.w  216,203,192,181,171,161,152,144,136,128,121,114
  1473.  
  1474. .QC_posstart:
  1475.   Dc.l 0
  1476.  
  1477. .QC_currpattpointer:
  1478.   Dc.l 0
  1479.  
  1480. .QC_currpatt:
  1481.   Dc.w 0
  1482.  
  1483. .QC_nrofpos:
  1484.   Dc.w 0
  1485.  
  1486. .QC_pos:
  1487.   Dc.w 0
  1488.  
  1489. .QC_newposnr:
  1490.   Dc.w 0
  1491.  
  1492. .QC_speed:
  1493.   Dc.w 6
  1494.  
  1495. .QC_speedcount:
  1496.   Dc.w 0
  1497.  
  1498. .QC_breakrow:
  1499.   Dc.w 0
  1500.  
  1501. .QC_newrow:
  1502.   Dc.w 0
  1503.  
  1504. .QC_rowcount:
  1505.   Dc.w 0
  1506.  
  1507. .QC_arpcount:
  1508.   Dc.w 0
  1509.  
  1510. .QC_looprow:
  1511.   Dc.w 0
  1512.  
  1513. .QC_tempo:
  1514.   Dc.w 125
  1515.  
  1516. .QC_dmacon:
  1517.   Dc.w 0
  1518.  
  1519. .QC_newposflag:
  1520.   Dc.b 0
  1521.  
  1522. .QC_jumpbreakflag:
  1523.   Dc.b 0
  1524.  
  1525. .QC_loopcount:
  1526.   Dc.b 0
  1527.  
  1528. .QC_pattwait:
  1529.   Dc.b 0
  1530.  
  1531. .QC_introrow:
  1532.   Dc.b 0,0
  1533.  
  1534. .QC_ciaspeed:
  1535.   Dc.l 0
  1536.  
  1537. .QC_event:
  1538.   Dc.b 0  ;bit 0 = check vblank
  1539.  
  1540. .QC_playpatt:
  1541.   Dc.b 0
  1542.  
  1543. .QC_quietsamp:
  1544.   Dc.w 0,1
  1545.   Dcb.b 20,0
  1546.   Dc.w 0
  1547.   Dc.w 1
  1548.   Dc.l QC_quiet
  1549.  
  1550. .QC_chan1:
  1551.   Dc.l 0    ;The note and command
  1552.   Dc.l 0    ;Repeat
  1553.   Dc.w 0    ;Replen
  1554.   Dc.w 0    ;Period
  1555.   Dc.w 0    ;Volume
  1556.   Dc.w 0    ;Length
  1557.   Dc.w 0    ;Unused
  1558.   Dc.l 0    ;Start
  1559.   Dc.w 1    ;DMAbit
  1560.   Dc.w 0    ;NoteNr2
  1561.   Dc.w 0    ;WantedPeriod
  1562.   Dc.b 0    ;Portdir
  1563.   Dc.b 0    ;VibWave
  1564.   Dc.b 0    ;Glisscont
  1565.   Dc.b 0    ;Vibcmd
  1566.   Dc.w 0    ;VibPos
  1567.   Dc.b 0    ;Tremwave
  1568.   Dc.b 0    ;Tremcmd
  1569.   Dc.w 0    ;Trempos
  1570.   Dc.b 0    ;Sampleoffset
  1571.   Dc.b 0    ;Retrig
  1572.   Dc.b 0    ;Portspeed
  1573.   Dc.b 0    ;Looping
  1574.   Dc.l 0    ;Finetune
  1575.   Dc.l 0    ;AdrCounter
  1576.   Dc.b 0    ;Going
  1577.   Dc.b 0    ;Samplenr
  1578.   Dc.w 0    ;Repeat in words
  1579.   Dc.w 0    ;Allways the length in words
  1580.   Dc.l 0    ;Real startpos
  1581.   Dc.b $ff  ;True = playable
  1582.   Dc.b 0
  1583.   Dc.w $40  ;Mainvol
  1584.   Dc.w 0    ;Realvol
  1585.  
  1586. .QC_chan2:
  1587.   Dc.l 0
  1588.   Dc.l 0
  1589.   Dc.w 0
  1590.   Dc.w 0
  1591.   Dc.w 0
  1592.   Dc.w 0
  1593.   Dc.w 0
  1594.   Dc.l 0
  1595.   Dc.w 2
  1596.   Dc.w 0
  1597.   Dc.w 0
  1598.   Dc.b 0
  1599.   Dc.b 0
  1600.   Dc.b 0
  1601.   Dc.b 0
  1602.   Dc.w 0
  1603.   Dc.b 0
  1604.   Dc.b 0
  1605.   Dc.w 0
  1606.   Dc.b 0
  1607.   Dc.b 0
  1608.   Dc.b 0
  1609.   Dc.b 0
  1610.   Dc.l 0
  1611.   Dc.l 0
  1612.   Dc.b 0
  1613.   Dc.b 0
  1614.   Dc.w 0
  1615.   Dc.w 0
  1616.   Dc.l 0
  1617.   Dc.b $ff
  1618.   Dc.b 0
  1619.   Dc.w $40  ;Mainvol
  1620.   Dc.w 0
  1621.  
  1622. .QC_chan3:
  1623.   Dc.l 0
  1624.   Dc.l 0
  1625.   Dc.w 0
  1626.   Dc.w 0
  1627.   Dc.w 0
  1628.   Dc.w 0
  1629.   Dc.w 0
  1630.   Dc.l 0
  1631.   Dc.w 4
  1632.   Dc.w 0
  1633.   Dc.w 0
  1634.   Dc.b 0
  1635.   Dc.b 0
  1636.   Dc.b 0
  1637.   Dc.b 0
  1638.   Dc.w 0
  1639.   Dc.b 0
  1640.   Dc.b 0
  1641.   Dc.w 0
  1642.   Dc.b 0
  1643.   Dc.b 0
  1644.   Dc.b 0
  1645.   Dc.b 0
  1646.   Dc.l 0
  1647.   Dc.l 0
  1648.   Dc.b 0
  1649.   Dc.b 0
  1650.   Dc.w 0
  1651.   Dc.w 0
  1652.   Dc.l 0
  1653.   Dc.b $ff
  1654.   Dc.b 0
  1655.   Dc.w $40  ;Mainvol
  1656.   Dc.w 0
  1657.  
  1658. .QC_chan4:
  1659.   Dc.l 0
  1660.   Dc.l 0
  1661.   Dc.w 0
  1662.   Dc.w 0
  1663.   Dc.w 0
  1664.   Dc.w 0
  1665.   Dc.w 0
  1666.   Dc.l 0
  1667.   Dc.w 8
  1668.   Dc.w 0
  1669.   Dc.w 0
  1670.   Dc.b 0
  1671.   Dc.b 0
  1672.   Dc.b 0
  1673.   Dc.b 0
  1674.   Dc.w 0
  1675.   Dc.b 0
  1676.   Dc.b 0
  1677.   Dc.w 0
  1678.   Dc.b 0
  1679.   Dc.b 0
  1680.   Dc.b 0
  1681.   Dc.b 0
  1682.   Dc.l 0
  1683.   Dc.l 0
  1684.   Dc.b 0
  1685.   Dc.b 0
  1686.   Dc.w 0
  1687.   Dc.w 0
  1688.   Dc.l 0
  1689.   Dc.b $ff
  1690.   Dc.b 0
  1691.   Dc.w $40  ;Mainvol
  1692.   Dc.w 0
  1693.  
  1694. .QC_samplepointers:
  1695.   Ds.l 256
  1696.  
  1697. .QC_patternpointers:
  1698.   Ds.l 256
  1699.  
  1700. .QC_quiet:
  1701.   Dc.l 0
  1702.  
  1703.